//toernooiaanmaken
package model;

import componenten.Database;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author Gebruiker
 */

public class Toernooi {

    private String naam;
    private String tijd;
    private String datum;
    private double inleggeld;
    private int minAantalSpelers;
    private String postcode;
    private String huisnummer;
    private ArrayList bericht;
    private boolean gevalideerd;

    public Toernooi() {

        this.naam = "";
        this.tijd = "00:00";
        this.datum = "yyyy-mm-dd";
        this.inleggeld = 0.00;
        this.huisnummer = "";
        this.postcode = "";
        this.minAantalSpelers = 0;

        this.bericht = new ArrayList();
        this.gevalideerd = true;
    }

    public Toernooi(String argNaam, String argDatum) {

        String sql = "SELECT * FROM toernooi WHERE toernooi_naam = '" + argNaam + "' AND toernooi_datum = '" + argDatum + "'";
        System.out.print(sql);

        try {
            ResultSet result = Database.executeSelectQuery(sql);
            result.next();
            this.naam = result.getString("toernooi_naam");
            this.tijd = result.getString("toernooi_tijd");
            this.datum = result.getString("toernooi_datum");
            this.inleggeld = result.getInt("toernooi_inleggeld");
            this.minAantalSpelers = result.getInt("toernooi_min_deelnemers");
            this.postcode = result.getString("locatie_postcode");
            this.huisnummer = result.getString("locatie_huisnummer");

        } catch (SQLException e) {
            System.out.print(e);
        }

        this.bericht = new ArrayList();
        this.gevalideerd = true;
    }

    private void valideren() {
        if ("".equals(this.getNaam())) {
            this.getBericht().add("Naam is verplicht");
            this.gevalideerd = false;
        }

        if ("yyyy-mm-dd".equals(this.getDatum())) {
            this.getBericht().add("Datum is verplicht");
            this.gevalideerd = false;
        }
        if ("".equals(this.getTijd())) {
            this.getBericht().add("Tijd is verplicht");
            this.gevalideerd = false;
        }
        if (this.getInleggeld() == 0.00) {
            this.getBericht().add("Inleggeld is verplicht");
            this.gevalideerd = false;
        }
        if (this.getMinAantalSpelers() == 0) {
            this.getBericht().add("Minimale spelers zijn verplicht");
            this.gevalideerd = false;
        }
        if ("".equals(this.getPostcode())) {
            this.getBericht().add("Postcode is verplicht");
            this.gevalideerd = false;
        }
        if ("".equals(this.getHuisnummer())) {
            this.getBericht().add("Huisnummer is verplicht");
            this.gevalideerd = false;
        }
        if (!this.datum.matches("^[0-9]{4}-[0-9]{2}-[0-9]{2}$")) {
            this.getBericht().add("Datum moet yyyy-mm-dd zijn");
            this.gevalideerd = false;
        }
        if (!this.tijd.matches("^[0-2][0-9]:[0-5][0-9]:[0-5][0-9]$")) {
            this.getBericht().add("Tijd moet 00:00 zijn");
            this.gevalideerd = false;
        } 
    }

    public boolean toevoegen() {
        this.valideren();
        if (this.gevalideerd) {
            String sqlQuery = "INSERT INTO fullhouse.toernooi ("
                    + "toernooi_naam, "
                    + "toernooi_tijd, "
                    + "toernooi_datum, "
                    + "toernooi_inleggeld, "
                    + "toernooi_min_deelnemers, "
                    + "locatie_postcode, "
                    + "locatie_huisnummer"
                    + ") VALUES ("
                    + "'" + this.naam + "'" + " , "
                    + "'" + this.tijd + "'" + " , "
                    + "'" + this.datum + "'" + " , "
                    + "'" + this.inleggeld + "'" + " , "
                    + this.minAantalSpelers + " , "
                    + "'" + this.postcode + "'" + " , "
                    + "'" + this.huisnummer + "'" 
                    + ")";
            System.out.println(sqlQuery);
            if (Database.executeInsertQuery(sqlQuery) != 1) {
                this.gevalideerd = false;
                this.getBericht().add("Er is een fout onstaan tijdens het opslaan probeer opnieuw");
            }
        }
        return this.gevalideerd;
    }
    
    public boolean verwijderen() {
        if (this.gevalideerd) {

            String sqlQuery = "DELETE FROM fullhouse.toernooi "
                    + "WHERE "
                    + "toernooi_datum = '" + this.datum + "' "
                    + "AND "
                    + "toernooi_naam = '" + this.naam + "'";

            if (Database.executeDeleteQuery(sqlQuery) != 1) {
                this.gevalideerd = false;
                this.getBericht().add("Er is een fout onstaan tijdens het verwijderen probeer opnieuw");
            }
        }
        return this.gevalideerd;
    }
    
     public boolean bijwerken(String argNaam, String argDatum) {
        this.valideren();
        if (this.gevalideerd) {
            String sqlQuery = "UPDATE fullhouse.toernooi SET "
                    + "toernooi_naam = '" + this.naam + "', "
                    + "toernooi_tijd = '" + this.tijd + "', "
                    + "toernooi_datum = '" + this.datum + "', "
                    + "toernooi_inleggeld = " + this.inleggeld + ", "
                    + "toernooi_min_deelnemers = " + this.minAantalSpelers + ", "
                    + "locatie_huisnummer = '" + this.huisnummer + "', "
                    + "locatie_postcode = '" + this.postcode + "' "
                    + "WHERE toernooi_naam = '" + argNaam + "' "
                    + "AND toernooi_datum = '" + argDatum + "'";

            if (Database.executeUpdateQuery(sqlQuery) != 1) {
                this.gevalideerd = false;
                this.getBericht().add("Er is een fout onstaan tijdens het bijwerken probeer opnieuw");
            }
        }
        return this.gevalideerd;
    }

    /**
     * @return the naam
     */
    public String getNaam() {
        return naam;
    }

    /**
     * @param naam the naam to set
     */
    public void setNaam(String naam) {
        this.naam = naam;
    }

    /**
     * @return the postcode
     */
    public String getPostcode() {
        return postcode;
    }

    /**
     * @param postcode the postcode to set
     */
    public void setPostcode(String postcode) {
        this.postcode = postcode;
    }

    /**
     * @return the huisnummer
     */
    public String getHuisnummer() {
        return huisnummer;
    }

    /**
     * @param huisnummer the huisnummer to set
     */
    public void setHuisnummer(String huisnummer) {
        this.huisnummer = huisnummer;
    }

    /**
     * @return the datum
     */
    public String getDatum() {
        return datum;
    }

    /**
     * @param datum the datum to set
     */
    public void setDatum(String datum) {
        this.datum = datum;
    }

    /**
     * @return the tijd
     */
    public String getTijd() {
        return tijd;
    }

    /**
     * @param tijd the tijd to set
     */
    public void setTijd(String tijd) {
        this.tijd = tijd;
    }

    /**
     * @return the inleggeld
     */
    public double getInleggeld() {
        return inleggeld;
    }

    /**
     * @param inleggeld the inleggeld to set
     */
    public void setInleggeld(String inleggeld) {
        try {
            this.inleggeld = Double.parseDouble(inleggeld);
        } catch (NumberFormatException e) {
            this.gevalideerd = false;
            this.getBericht().add("Voer een geldig nummer in allen gehele getallen boven de 0" + e.getMessage());
        }
    }

    /**
     * @return the minAantalSpelers
     */
    public int getMinAantalSpelers() {
        return minAantalSpelers;
    }

    /**
     * @param minAantalSpelers the minAantalSpelers to set
     */
    public void setMinAantalSpelers(String minAantalSpelers) {
        try {
            this.minAantalSpelers = Integer.parseInt(minAantalSpelers);
        } catch (NumberFormatException e) {
            this.gevalideerd = false;
            this.getBericht().add("Voer een geldig nummer in allen gehele getallen boven de 0" + e.getMessage());
        }
    }

    /**
     * @return the bericht
     */
    public ArrayList getBericht() {
        return bericht;
    }
    
    public void resetBericht() {
        this.bericht = new ArrayList();
        this.gevalideerd = true;
    }

    /**
     * @return the gevalideerd
     */
    public boolean isGevalideerd() {
        return gevalideerd;
    }

    public String[] getInformatie() {
        return new String[]{this.naam, this.datum, this.postcode, this.huisnummer};
    }
}